package com.study.juc;

import org.openjdk.jol.info.ClassLayout;
import org.openjdk.jol.vm.VM;

/**
 * @program: juc-study
 * @author: jzhou
 * @date: 2022-08-18 17:01
 * @version: 1.0
 * @description: 对象堆内存布局案例
 **/
public class ObjectHeadDemo {
	public static void main(String[] args) {
		Object o = new Object();// 16 bytes
//		System.out.println(o.hashCode());//
//		synchronized (o){ //如何知道一个对象被锁住
//
//		}
		// System.gc(); 手动垃圾收集，哪里标记了一个对象被搬迁的次数 15次可以从新生代 --> 到老年代
//		System.out.println(VM.current().details());
//		System.out.println(VM.current().objectAlignment());
		System.out.println(ClassLayout.parseInstance(o).toPrintable());

		Customer c = new Customer();
		System.out.println(ClassLayout.parseInstance(c).toPrintable());


	}
}
class Customer{ //只有一个对象头的实力对象，占16字节(忽略压缩指针影响)
	int id;  // 4 字节
	boolean flag = false; // 1 字节
	double d;
//	float f;
//	long l;
//	String s;
} // 对象的起始地址必须是 8 的整数倍， 16 + 4 + 1 = 21 ， 需要对齐填充 补到24字节